on:
  - pull_request
  - push

name: ci-mssql

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  tests:
    name: PHP ${{ matrix.php }}-mssql-${{ matrix.mssql }}

    env:
      EXTENSIONS: pdo, pdo_sqlsrv
      XDEBUG_MODE: coverage, develop

    runs-on: ubuntu-latest

    strategy:
      fail-fast: false
      matrix:
        include:
          - php: 7.4
            mssql: server:2017-latest
          - php: 8.0
            mssql: server:2019-latest
          - php: 8.1
            mssql: server:2019-latest
          - php: 8.2
            mssql: server:2022-latest
          - php: 8.3
            mssql: server:2022-latest
          - php: 8.4
            mssql: server:2022-latest

    services:
      mssql:
          image: mcr.microsoft.com/mssql/${{ matrix.mssql }}
          env:
              SA_PASSWORD: YourStrong!Passw0rd
              ACCEPT_EULA: Y
              MSSQL_PID: Developer
          ports:
              - 1433:1433
          options: --name=mssql --health-cmd="/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'YourStrong!Passw0rd' -Q 'SELECT 1'" --health-interval=10s --health-timeout=5s --health-retries=3

    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Create MS SQL Database
        run: docker exec -i mssql /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'YourStrong!Passw0rd' -Q 'CREATE DATABASE yiitest'

      - name: Install PHP with extensions
        uses: shivammathur/setup-php@v2
        with:
          coverage: xdebug
          extensions: ${{ env.EXTENSIONS }}
          ini-values: date.timezone='UTC'
          php-version: ${{ matrix.php }}
          tools: composer:v2, pecl

      - name: Update composer
        run: composer self-update

      - name: Install dependencies with composer
        if: matrix.php != '8.4'
        run: composer update --prefer-dist --no-interaction --no-progress --optimize-autoloader --ansi

      - name: Install dependencies with PHP 8.4.
        if: matrix.php == '8.4'
        run: composer update --prefer-dist --no-interaction --no-progress --optimize-autoloader --ignore-platform-reqs --ansi

      - name: Run MSSQL tests with PHPUnit and generate coverage.
        run: vendor/bin/phpunit --group mssql --coverage-clover=coverage.xml --colors=always

      - name: Upload coverage to Codecov.
        if: matrix.php == '7.4'
        uses: codecov/codecov-action@v4
        with:
          token: ${{ secrets.CODECOV_TOKEN }}
          file: ./coverage.xml
